/* 
01. 继承 ：子类通过 extends 继承父类后，可以使用父类的属性和方法
02. 重写 ：子类和父类的方法名一样，可以重写父类的方法
03. 静态成员和实例成员 ：对象的属性是实例成员，构造函数的属性是静态成员
04. 显式原型 ：
        1. 构造函数(对象/实例),有一个 prototype 属性，prototype 的是一个对象。
        2. prototype 这个对象的所有属性和方法是构造函数的实例化的对象，所共享。
05. 隐式原型 ：
        1.每个对象都会有一个属性 __proto__,
        2.向了构造函数的 prototype (显式原型) 
06. Symbol : 表示字符串的唯一性
07. let 的特点 ： 不能重名，有块级作用域。
08. 模板引擎的作用 ：实现数据和模板(H5代码)的分离
09. 扩展运算符 ： 
        取出对象所有可以遍历的属性，然后拷贝给当前对象。  
        作用：1. 对象的浅拷贝; 2. 对象的合并
10. call() : 调用函数，并修改 this 指向
11. apply() : 
        1. 调用函数，修改 this 指向
        2. 参数必须时数组(伪数组),数组解构为函数的形参
12. bind() : 修改函数的 this 指向，不调用函数
13. 如何开启严格模式 ：  "use strict";
14. 原型链 :
        当访问一个对象的属性时，会在这个对象本身属性上查找。
        如果没有，则查找它的 __proto__ 隐式原型,构造函数的显式原型。
        如果还没有，就会在 构造函数的显式原型 的 __proto__  上查找。
        这样一层一层向上找，形成一个链式解构，我们称为原型链。

    原型链的作用：
        1. 属性共享，节约内存空间。
        2. 实现继承。
15. 构造函数如何实现属性和方法的继承 ：
        属性的继承 call() 调用父构造函数，并修改 this 指向
        方法的继承：让子构造函数的原型对象指向父构造函数的实例
16. 高阶函数 ：它接收函数作为参数，或把函数作为返回值输出
17. 堆栈模型 ：
        内存栈模型：stack
          1. 先进后出
          2. 里面存储的是函数
          3. add 函数的过程，称为 入栈
          4. delete函数，函数执行完毕，出栈。
        内存的堆模型：heap
           主要用来存储变量
18. 闭包的作用 ：在函数外部访问构造的局部变量
19. 递归 ：函数内部，自己调用自己
20. 剩余参数 ： 
        形参的个数少于实参的个数. 多余的参数,
        前面加 ... ,表示为一个数组来接收.
21. 对象浅拷贝的方法 ：Object.assign(target, obj);
22. 对象深拷贝的方法 ：将对象转化为 json 字符串，再转化回来
23. 正则表达式的作用 : 验证数据的合法性
24. set 的特点 ：元素唯一
25. map 的特点 ：里面都是键值对
*/